perm filename TF[D,SYS] blob sn#320792 filedate 1977-12-08 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002		TITLE	TF	TAPE TEST END OF FILE
C00003 00003		SUBTTL	DATA STORAGE
C00004 00004	BEGIN:	CALLI	0
C00006 00005		SUBTTL	READ
C00008 00006		SUBTTL	WRITE
C00009 00007		SUBTTL	MORE, SMALL ROUTINES
C00011 ENDMK
C⊗;
	TITLE	TF	TAPE TEST END OF FILE
A←1
B←2
C←3
D←4

P←17

MTA←←1
PDLEN←←40
	SUBTTL	DATA STORAGE
PDLIST:	BLOCK	PDLEN
IBUF:	BLOCK	3
OBUF:	BLOCK	3
RECSIZ:	0			;SIZE OF RECORD.
FIB1:	0
FIB2:	0
ERRCNT:	0			;COUNT OF READ ERRORS
WORDNO:	0			;WORD NUMBER ON TAPE

BEGIN:	CALLI	0
	MOVE	P,[IOWD PDLEN,PDLIST]
	INIT	MTA,10
	'TTT   '
	XWD	OBUF,IBUF
	JRST	[OUTSTR	[ASCIZ/ASSIGN THE MAG TAPE AS 'TTT' AND RESTART
/]
		CALLI 12]
	UINBF	MTA,[2				;MAKE 2 BUFFERS EACH
		    1001]			;FOR 512 DATA WORDS.
	UOUTBF	MTA,[2
		    1001]
CMDH:	OUTSTR	[ASCIZ/COMMANDS ARE:
W	WRITE DATA
R	READ DATA
U	REWIND TAPE
X	EXIT
2 5 8	SET DENSITY
H	TYPE THIS LIST AGAIN/]

CMD:	OUTSTR	[ASCIZ/
*/]
	TTCALL	4,A
	GETSTS	MTA,B
	TRZ	B,760000
	SETSTS	MTA,(B)
	JRST	CMD2
CMD1:	TTCALL	2,A
	JRST	CMD
CMD2:	CAIN	A,15
	JRST	CMD1
	CAIE	A,12
	CAIN	A,175
	JRST	CMD
	CAIL	A,"A"+40
	CAILE	A,"Z"+40
	JRST	.+2
	SUBI	A,40
	CAIN	A,"H"
	JRST	[OUTSTR	@CMDH
		JRST	CMD1]
	CAIN	A,"U"
	JRST	[MTAPE	MTA,1
		JRST	CMD1]
	CAIN	A,"X"
	CALLI	12
	CAIE	A,"8"
	CAIN	A,"2"
	JRST	DSET
	CAIN	A,"5"
	JRST	DSET
	CAIN	A,"R"
	JRST	READ
	CAIN	A,"W"
	JRST	WRITE
	TTCALL	11,
	JRST	CMDH

DSET:	CAIN	A,"2"
	MOVEI	B,200
	CAIN	A,"5"
	MOVEI	B,400
	CAIN	A,"8"
	MOVEI	B,600
	GETSTS	MTA,A
	TRZ	A,600
	IORI	A,(B)
	SETSTS	MTA,(A)
	JRST	CMD1

	SUBTTL	READ
READ:	PUSHJ	P,GETSIZ		;GET SIZE OF TRANSFER
	PUSHJ	P,GENINI		;INITIALIZE GENERATOR
	SETOM	WORDNO			;INITIALIZE WORD INDEX
	SETZM	ERRCNT			;CLEAR ERROR COUNT
READ5:	MOVEI A,1000
	MOVEM A,FILSIZ
	PUSHJ P,GENINI
READ1:	PUSHJ	P,GET
	JRST	READX			;EOF
	SOSGE FILSIZ
	JRST READ4			;MISSING EOF
	AOS	WORDNO
	PUSH	P,A
	PUSHJ	P,GENDAT
	CAME	A,(P)
	PUSHJ	P,READ2
	POP	P,A
	SOSLE	RECSIZ
	JRST	READ1
	OUTSTR	[ASCIZ/READ DONE.
/]
	CLOSE	MTA,			;FLUSH FURTHER BUFFERS
	SKIPG	A,ERRCNT
	JRST	CMD1
	PUSHJ	P,DISDEC
	OUTSTR	[ASCIZ/.  ERRORS DETECTED
/]
	JRST	CMD1

READX:	SKIPE FILSIZ
	JRST READXX
	CLOSE MTA,		;GET RID OF EOF BITS
	JRST READ5

READ4:	OUTSTR [ASCIZ /MISSING EOF MARK
/]
	EXIT


READXX:	OUTSTR	[ASCIZ/READ: UNEXPECTED END OF FILE.
/]
	CLOSE	MTA,
	JRST	CMD1


READ2:	SKIPG	ERRCNT
	OUTSTR	[ASCIZ/LOC	CORE		TAPE
/]
	PUSH	P,A
	MOVE	A,WORDNO
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/	/]
	POP	P,A
	PUSHJ	P,DISOCT
	OUTSTR	[ASCIZ/	/]
	MOVE	A,-1(P)
	PUSHJ	P,DISOCT
	OUTSTR	[ASCIZ/
/]
	AOS	ERRCNT
	POPJ	P,

	SUBTTL	WRITE
WRITE:	PUSHJ	P,GETSIZ
	PUSHJ	P,GENINI
	MOVEI A,1000
	MOVEM A,FILSIZ#
WRIT1:	PUSHJ	P,GENDAT
	PUSHJ	P,PUT
	SOSG FILSIZ
	JRST WRIT3
WRIT2:	SOSLE	RECSIZ
	JRST	WRIT1
	CLOSE	MTA,			;MAKE EOF MARK.
	OUTSTR	[ASCIZ/WRITE DONE.
/]
	JRST	CMD1

WRIT3:	MTAPE MTA,3			;WRITE EOF
	MOVEI A,1000
	MOVEM A,FILSIZ
	PUSHJ P,GENINI
	JRST WRIT2

REPEAT 1,<

GENINI:	SETZM	FIB1
	MOVEI	A,1
	MOVEM	A,FIB2
	POPJ	P,

GENDAT:	MOVE	A,FIB2
	ADDM	A,FIB1
	EXCH	A,FIB1
	MOVEM	A,FIB2
	POPJ	P,
>
REPEAT 0,<
GENDAT:
GENINI:	MOVE A,[777777,,777777]
	POPJ	P,
>
	SUBTTL	MORE, SMALL ROUTINES
DISLOC:	HRLZ	A,A
	MOVEI	C,6
	JRST	OCTPNT
DISOCT:	MOVEI	C,14
OCTPNT:	SETZ	B,
	ROTC	A,3
	ADDI	B,"0"
	TTCALL	1,B
	SOJG	C,OCTPNT
	POPJ	P,

DISDEC:	IDIVI	A,12
	HRLM	B,(P)
	JUMPE	A,.+2
	PUSHJ	P,DISDEC
	HLRZ	A,(P)
	ADDI	A,"0"
	TTCALL	1,A
	POPJ	P,

PUT:	SOSG	OBUF+2
	OUT	MTA,
	JRST	PUT1
	OUTSTR	[ASCIZ/WRITE ERROR. MT STATUS = /]
	GETSTS	MTA,A
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/
/]
	HALT	CPOPJ

PUT1:	IDPB	A,OBUF+1
	POPJ	P,


GET:	SOSG	IBUF+2
	IN	MTA,
	JRST	GET1
	STATZ	MTA,20000
	POPJ	P,
	OUTSTR	[ASCIZ/MT DETECTED READ ERROR.  STATUS = /]
	GETSTS	MTA,A
	PUSHJ	P,DISLOC
	OUTSTR	[ASCIZ/
/]
	HALT	CPOPJ1

GET1:	ILDB	A,IBUF+1
CPOPJ1:	AOS	(P)
CPOPJ:	POPJ	P,

GETSIZ:	OUTSTR	[ASCIZ/TYPE NUMBER OF WORDS TO TRANSFER: /]
	SETZ	B,
	TTCALL	11,
GETNUM:	TTCALL	4,A
	CAIL	A,"0"
	CAILE	A,"9"
	JRST	GETN1
	IMULI	B,12
	ADDI	B,-"0"(A)
	JRST	GETNUM
GETN1:	MOVEM	B,RECSIZ
	POPJ	P,
	END	BEGIN